/*
 * ArchivoBinarioyBuffer.h
 *
 *  Created on: 01/11/2009
 *      Author: hernan
 */

#ifndef ARCHIVOBINARIOYBUFFER_H_
#define ARCHIVOBINARIOYBUFFER_H_

#include "Almacenamiento.h"
#include <fstream>
#include <iostream>
#include "../Externa/Dato.h"
#include "../Externa/Clave.h"
#include <list>
#include "ArchivoBinario.h"
#include "Buffer.h"


class ArchivoBinarioyBuffer: public Almacenamiento {

	int position;

	ArchivoBinario *archivo;

	Buffer *buffer;


public:
	ArchivoBinarioyBuffer();

	ArchivoBinarioyBuffer(const string& nombreArchivo,int Tamanio);

	virtual ~ArchivoBinarioyBuffer();


	/**
	 * Metodo que, previamente consultando al indice sobre un dato y devolviendo este una posicion al archivo * buffer, devuelve
	 * el dato en cuestion.
	 */
	public: virtual string getData(int position);

	/**
	 * Metodo que vacia el buffer (liberando memoria) y el archivo (abriendolo para escritura borrando todo contenido anterior)
	 *
	 */
	public: virtual void clean();

	/**
	 * Metodo que borra del archivo de Texto y del buffer el dato alojado en la posicion
	 * indicada por el parametro position
	 */
	public: virtual void deleteData(int pos);

	/**
	 * Metodo que salva en buffer y disco el dato recibido por parametro. Si existiera preciamente en el buffer lo actualiza
	 */

	public: virtual int saveData(string data, int posicion);

	/**
	 * Metodo que actualiza los datos alojados en la posicion pasada por parametro
	 * con los datos del parametro data. Actualiza el buffer.
	 */
	public: virtual void updateData(int position,string data);
};

#endif /* ARCHIVOBINARIOYBUFFER_H_ */
